import axios from 'axios'
import {ElMessage} from "element-plus";

const RESULT_CODE = {
    SUCCESS: 200,
    UNAUTHORIZED: 401,
}

const request = axios.create({
    baseURL: process.env.VUE_APP_BASE_API,  // 注意！！ 这里是全局统一加上了 '/api' 前缀，也就是说所有接口都会加上'/api'前缀在，页面里面写接口的时候就不要加 '/api'了，否则会出现2个'/api'，类似 '/api/api/user'这样的报错，切记！！！
    timeout: 5000
})

// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token，对请求参数统一加密
request.interceptors.request.use(config => {

        if (localStorage.getItem('token')) {
            config.headers.Authorization = 'Bearer ' + localStorage.getItem('token')
            // config.headers['Content-Type'] = 'application/json';
        }
        return config
    }, error => {
        Promise.reject(error)
    }
)

// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data;
        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        if (res.code != RESULT_CODE.SUCCESS) {
            if (res.code == RESULT_CODE.UNAUTHORIZED) {
                // TODO: 未登录处理
            } else {
                ElMessage.error(response.data.message || "服务器错误");
                return Promise.reject(res);
            }
        }else {
            return res;
        }

    },
    error => {
        console.log('err' + error)
        let {message} = error;
        if (message == "Network Error") {
            message = "后端接口连接异常";
        } else if (message.includes("timeout")) {
            message = "系统接口请求超时";
        } else if (message.includes("Request failed with status code")) {
            message = "系统接口" + message.substr(message.length - 3) + "异常";
        }
        ElMessage({message: message, type: 'error', duration: 5 * 1000})
        return Promise.reject(error)
    }
)


export default request

